import store from './store.js'
import qs from 'qs'
import moment from 'moment'

const common = {
	/**
	 * 获取屏幕高度，菜单高度
	 * @param {*} callback 回调方法
	 */
	setWidthHeight: (callback) => {
		let data = uni.getSystemInfoSync()
		store.commit('setWindowHeight', data.windowHeight)
		if (callback) {
			setTimeout(() => {
				callback()
			}, 100)
		}
		return store.state.topHeight
	},
	/**
	 * 路由跳转
	 * @param {*} url 路由
	 * @param {*} id id
	 * @param {*} current 类型
	 */
	toLink: (url, id, current) => {
		uni.navigateTo({
			url: `${url}?id=${id}&current=${current}`
		})
	},
	toLinkQuery: (url, query) => {
		console.log(url, query);
		let querys = qs.stringify(query)
		uni.navigateTo({
			url: `/subpages/${url}/${url}?${querys}`
		})
	},
	/**
	 * @param {*} index 返回下标
	 */
	toBack: (index) => {
		uni.navigateBack({
			delta: index
		})
	},
	/**
	 * 根据价格算报价区间
	 * @param {*} price 原价格
	 * @param {*} opt 订单类型 0：预付单 1：竞价单
	 */
	getOfferRangeByPrice: (price) => {
		let str = ''
		if (price > 20 && price <= 30) {
			str = '1'
		} else if (price > 30 && price <= 40) {
			str = '2'
		} else if (price > 40 && price <= 50) {
			str = '3'
		} else if (price > 50 && price <= 60) {
			str = '4'
		} else if (price > 60 && price <= 70) {
			str = '5'
		} else if (price > 70 && price <= 80) {
			str = '6'
		} else if (price > 80 && price <= 90) {
			str = '7'
		} else if (price > 90) {
			str = '8'
		} else {
			str = '9'
		}
		return {
			low: (price * store.state.paying[str].low).toFixed(2),
			high: (price * store.state.paying[str].high).toFixed(2)
		}
	},
	/**
	 * 扫码
	 * @param {*} callback 回调方法
	 * @param {*} code 扫码类型
	 */
	setScanCode: (callback, code = ['qrCode']) => {
		let data = ''
		uni.scanCode({
			scanType: ['qrCode'],
			success: (res) => {
				callback(res)
			}
		})
	},
	/**
	 * 选择图片
	 * @param {*} callback 回调方法
	 * @param {*} count 上传数量
	 * @param {*} type 上传类型
	 */
	// setChooseImage: (_this, count = 1, type = ['album ']) => {
	setChooseImage: (callback, count = 1, type = ['album', 'camera']) => {
		uni.chooseImage({
			count: count,
			sizeType: 'compressed',
			sourceType: type,
			success: (res) => {
				// _this.chooseImage(res)
				// console.log(callback)
				callback(res)
			}
		})
	},
	/**
	 * 字符拆分成数据
	 * @param {*} chars 字符串
	 * @param {*} tochar 拆分字符
	 */
	tearString: (chars, tochar) => {
		return chars.split(tochar)
	},
	/**
	 * 查找字符
	 * @param {*} chars 字符串
	 * @param {*} tochar 查找内容
	 */
	searchChar: (chars, tochar) => {
		let index = chars.indexOf(tochar)
		return index
	},
	/**
	 * 字符串对半拆分
	 * @param {*} chars 字符串
	 */
	stringToHalf: (chars) => {
		let arr = []
		let length = chars.length
		arr[0] = chars.substring(0, parseInt(length / 2))
		arr[1] = chars.substring(parseInt(length / 2), length)
		return arr
	},
	/**
	 * 指定时间往后推几天
	 * @param {*} time 时间
	 * @param {*} day 推的天数
	 * @param {*} format 时间格式
	 */
	nowAfterDay: (time, day, format) => {
		return moment(moment(time).add(day, 'd')).format(format)
	},
	/**
	 * 指定时间往前推几天
	 * @param {*} time 时间
	 * @param {*} day 推的天数
	 * @param {*} format 时间格式
	 */
	nowBeforeDay: (time, day, format) => {
		return moment(moment(time).subtract(day, 'd')).format(format)
	},
	/**
	 * 获取10位时间戳
	 * @param {*} date 时间
	 */
	getTimestamp: (date) => {
		return moment(date).utcOffset(8).valueOf()
	},
	/**
	 * 获取间隔数据
	 * @param {*} start 开始
	 * @param {*} end 结束
	 * @param {*} zh 结束
	 */
	generateArray: (start, end, zh) => {
		// 转为数值格式，否则用户给end-year等传递字符串值时，下面的end+1会导致字符串拼接，而不是相加
		start = Number(start)
		end = Number(end)
		end = end > start ? end : start
		// 生成数组，获取其中的索引，并剪出来
		let data = [...Array(end + 1).keys()].slice(start)
		let arr = []
		data.map(item => {
			arr.push(item + zh)
		})
		return arr
	},
	/**
	 * 获取年份间隔数组
	 * @param {*} startYear 开始年
	 * @param {*} endYear 结束年
	 */
	setYears: (startYear, endYear) => {
		// 获取年份集合
		let year = common.generateArray(startYear, endYear, '年')
		return year
	},
	/**
	 * 获取月份间隔数组
	 */
	setMonths: () => {
		let month = common.generateArray(1, 12, '月')
		return month
	},
	/**
	 * 获取指定年月的天数
	 * @param {*} year 年
	 * @param {*} month 月
	 */
	setDays: (year, month) => {
		let totalDays = new Date(year, month, 0).getDate()
		let day = common.generateArray(1, totalDays, '日')
		day.unshift('全部')
		return day
	},
	/**
	 * 进行经纬度转换为距离的计算
	 * @param {*} d 数值
	 */
	Rad: (d) => {
		return d * Math.PI / 180.0; //经纬度转换成三角函数中度分表形式。
	},
	/**
	 * 计算距离，参数分别为第一点的纬度，经度；第二点的纬度，经度默认单位km
	 * @param {*} lat1 经数值1
	 * @param {*} lng1 纬数值1
	 * @param {*} lat2 经数值2
	 * @param {*} lng2 纬数值2
	 */
	getMapDistance: (lat1, lng1, lat2, lng2) => {
		var radLat1 = common.Rad(lat1);
		var radLat2 = common.Rad(lat2);
		var a = radLat1 - radLat2;
		var b = common.Rad(lng1) - common.Rad(lng2);
		var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
			Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
		s = s * 6378.137; // EARTH_RADIUS;
		s = Math.round(s * 10000) / 10000; //输出为公里
		s = s.toFixed(2);
		return s;
	},
	// 数组去重
	mergeArray: (arr1, arr2, name = 'created_at') => {
		if(arr1.length <= 0){
			return arr1 = arr2
		}
		var _arr = [];
		for (var i = 0; i < arr1.length; i++) {
			_arr.push(arr1[i]);
		}
		for (var i = 0; i < arr2.length; i++) {
			var flag = true;
			for (var j = 0; j < arr1.length; j++) {
				if (arr2[i][name] == arr1[j][name]) {
					arr1[j].subList.push(...arr2[i].subList)
					let index = _arr.findIndex(item => item[name] == arr2[i][name])
					_arr[index].subList = arr1[j].subList
					flag = false;
					break;
				}
			}
			if (flag) {
				_arr.push(arr2[i]);
			}
		}
		return _arr;
	},
	/**
	 * 获取当前定位
	 * @param {*} successBack 成功回调方法
	 * @param {*} failBack 失败回调方法
	 */
	getNowLocation: (successBack, failBack, first = false) => {
		let latitude = ''
		let longitude = ''
		uni.getLocation({
			type: 'wgs84',
			success: function(result) {
				successBack(result)
			},
			fail: function(error) {
				if(!first) {
					if(failBack) {
						failBack(error)
						uni.showModal({
							content:'检测到您未授权定位',
							confirmText: "去授权",
							cancelText:'取消',
							success: (res) => {
								if(res.confirm){
									uni.openSetting({
										success: (res) => {
											console.log('openSetting',res);
											uni.getLocation({
												type: 'wgs84',
												success: function(result) {
													successBack(result)
												}
											})
										}
									})
								}else{
									return false;
								}
							}
						})	
					}
				} else {
					failBack(error)
				}
			}
		})
	},
	/**
	 * input去抖动
	 * @param {*} _this this对象
	 * @param {*} callback 回调方法
	 */
	inputDebounce: (_this, callback) => {
		_this.timer ? clearTimeout(_this.timer) : ''
		console.log(_this.timer)
		_this.timer = setTimeout(()=>{
			callback()
		}, 500)
	},
	/**
	 * 城市缓存
	 * @param {*} callback 回调方法
	 */
	getCityInfo: (callback) => {
		let locCity = ''
		let city = uni.getStorageSync('chooseloc')
		city = city.replace(/cityName/g, 'nm')
		let loc = uni.getStorageSync('loc')
		if(city) {
			locCity = JSON.parse(city)
		} else if(loc) {
			locCity = JSON.parse(loc)
		}
		if(callback){
			callback()
		}
		return locCity
	},
	/**
	 * 唤起支付
	 * @param {*} data 支付参数
	 * @param {*} success 成功回调方法
	 * @param {*} fail 失败回调方法
	 */
	requestPayment: (data, success, fail) => {
		uni.requestPayment({
			provider: 'wxpay',
			timeStamp: data.timeStamp,
			nonceStr: data.nonceStr,
			package: data.package,
			signType: data.signType,
			paySign: data.paySign,
			success: function (res) {
				success(res)
			},
			fail: function (err) {
				fail(err)
			}
		});
	},
	/**
	 * 打电话
	 * @param {*} mobile 号码
	 */
	makePhoneCall: (mobile) => {
		uni.makePhoneCall({
			phoneNumber: `${mobile}`
		});
	},
	/**
	 * 判断当前时间是否在结束时间之前
	 * @param {*} endTime  结束时间
	 */
	isBefore(endTime){
		return moment().isBefore(endTime)
	},
}
export default common
